组件生产数学建模模拟题中使用遗传算法的改进和认识

遗传算法的最终结果可能每次都不一样。基于路径编码说明。

对于目标函数是求最小值时,在设计适应函数时,可以使用常数/目标函数值(大于0)的式子给出。用除法可以将有更小值的个体应该有更大的概率被选择,除法很好体现了这一点。用加减法在选择空间即选择纬度很小或者问题规模小时效果很糟糕,目标函数值差距不大,导致被选择的概率差距不大,所以好的个体和坏的个体被选择的可能性拉不开差距,从而最后求解得到的曲线波动很大。所以对于小数据问题选用除法对加减法进行了改进。这个常数的选取有点困难。

如果偏小(意思是与最优值很接近),由于大部分个体都不小于这个常数值,即使有好的个体,因为不好个体的大量存在,所以他们之间占比很容易知道是差不多的。从而很多不好的个体会被选择,所以不管训练多少轮数很难逼近最优值。尽量偏大一点,设置为目标函数的最大值也是可以的,题目未告知最大值或者不能算出来,则可以试验一下,设置多个值,多跑一下程序,选择最好的。

 

在求解最优化问题的时候,如果是连续数据可以离散化再计算。对于离散化的数据,如果目标函数不能用线性表示出来,比如工序要求每个组件必须在其他组件完成之后完成,这样的限制,用约束条件也不便于表达,这个时候可以考虑使用遗传算法、模拟退火算法等,因为像遗传算法可以自己定义目标函数,表达清晰方便。

 

路径编码比较二进制编码,二进制肯定占用内存小,但是在小数据问题中可以使用路径编码,因为路径编码直观而且好操作,不用转码到一些量,因为这个编码就是直接通过这些量(比如TSP问题中地点编号)来得到的。拿TSP问题来说,使用二进制编码与使用路径编码在选择、交叉和变异操作的时候没有本质区别,因为都是一些自变量的值发生改变。

 

TSP问题向量里面的地点编号不能重复,而有些问题允许这个待选择的向量里面的值重复,实现很简单自己写算子。只是注意在交叉算子中尽量不要让子代和父代发生很大的变动,否则变动很大,最后很难收敛。轮盘赌选择法比较常用于选择操作中,选择的依据与适应度大小有关。

最后附一张组件生产问题自己设计的遗传算法的结果图:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值